import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'

// 数据
const state = {
  // token: localStorage.getItem('token') || ''
  token: getToken() || '',
  userInfo: {}
}
// 同步
const mutations = {
  setToken(state, data) {
    // localStorage.setItem('token', data)
    // 利用cookie来实现数据持久化
    setToken(data)
    state.token = data
  },
  removeToken(state) {
    removeToken()
    state.token = ''
  },
  setUserInfo(state, data) {
    // 拷贝
    state.userInfo = { ...data }
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// 异步
const actions = {
//   // async ...await 可以用try... catch来捕获错误
//   async login(store, data) {
//     try {
//       const res = await login(data)
//       //console.log(23, res)
//       store.commit('setToken', res)
//     } catch (error) {
//       //console.log('错误逻辑', error)
//     }
//   }
// }

  // 成功失败逻辑
  // login(store, data) {
  //   login(data).then(res => {
  //     //console.log('请求最终获取的数据', res)
  //   }).catch(err => {
  //     // 一般是api错误
  //     //console.log('错误逻辑', err)
  //   })
  // }

  // actions这里我们故意不在这里捕获错误，在index.vue里面的点击事件来捕获
  async login(store, data) {
    // console.log('vuex 登录 action')
    const res = await login(data)
    // console.log('action接收到的res', res)
    store.commit('setToken', res)
    // 铺垫设置主动设置超时时间 主动介入
    localStorage.setItem('loginTime', Date.now())
  },
  async getUserInfo(store) {
    const res = await getUserInfo()
    const detail = await getUserDetailById(res.userId)
    // 用户基本资料不足，要用另外的接口资料补充
    store.commit('setUserInfo', {
      ...res,
      ...detail
      // staffPhoto: null
    })
  },
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
    // 退出残留权限问题
    resetRouter()
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
